package com.uade.tp.persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.uade.tp.negocio.Pedido;

public class AdministradorPersistenciaPedido {
	private static AdministradorPersistenciaPedido pool;
	
	
	private AdministradorPersistenciaPedido()
	{
		
	}
	
	public static AdministradorPersistenciaPedido getInstancia()
	{
		if (pool== null)
			pool =new AdministradorPersistenciaPedido();
		return pool;
	}
	
	public int insert(Pedido p)
	{
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		int id=0;
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "INSERT INTO  Pedidos (nro,fecha,cliente,precio) VALUES (?,?,?,?)" ;
			PreparedStatement ps = null;
 			ps = con.prepareStatement(senten);
			ps.setInt(1,p.getNro());
			ps.setDate(2,p.getFechaDB());
			ps.setString(3,p.getCliente());
			ps.setFloat(4,p.getPrecio());
					
			ps.execute();
			
		      ResultSet rs = ps.getGeneratedKeys();
              if(rs.next())
              {
                  id = rs.getInt(1);
              }
              
			PoolConnection.getPoolConnection().realeaseConnection(con);
			return id;
		}
	      catch( SQLException e ) 
	      {
	    	    System.out.println("Mensaje Error al Insertar Comida: " + e.getMessage());
				System.out.println("Stack Trace al Insertar Comida: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
				return 0;
	      }
	}
	public void update(Pedido p)
	{
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "UPDATE Pedidos set nro = ? ,fecha= ?,cliente= ?,precio= ? where id = ?" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setInt(1,p.getNro());
			ps.setDate(2,p.getFechaDB());
			ps.setString(3,p.getCliente());
			ps.setFloat(4,p.getPrecio());
			ps.setInt(5,p.getNro());
			ps.execute();
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Modificar Comida: " + e.getMessage());
				System.out.println("Stack Trace al Modificar Comida: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	}
	
	public int obtenerNroPedido()
	{
		int nro=1;
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "SELECT count(*) as nro from Pedidos" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ResultSet result = ps.executeQuery();
			while (result.next())
			{
				nro+=result.getInt("nro");
			}
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Borrar Producto: " + e.getMessage());
				System.out.println("Stack Trace al Borrar Producto: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      return nro;
	}
	
	public int cantidadPedidosCliente(Pedido p)
	{
		int nro=1;
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "SELECT count(*) as nro from Pedidos where cliente = ? and (fecha between #12/01/2006# and #13/01/2007#) " ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1, p.getCliente());
			ResultSet result = ps.executeQuery();
			while (result.next())
			{
				nro+=result.getInt("nro");
			}
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Borrar Producto: " + e.getMessage());
				System.out.println("Stack Trace al Borrar Producto: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      return nro;
	}

}
